package com.sjl.sophixdemo;

import android.app.Application;
import android.util.Log;

import com.taobao.sophix.PatchStatus;
import com.taobao.sophix.SophixManager;
import com.taobao.sophix.listener.PatchLoadStatusListener;

/**
 * App
 *
 * @author SJL
 * @date 2017/6/19 21:07
 */

public class App extends Application {
    private static final String TAG = "App";

    @Override
    public void onCreate() {
        super.onCreate();
        initSophix();
    }

    private void initSophix() {
        SophixManager.getInstance().setContext(this)
                .setAppVersion(BuildConfig.VERSION_NAME)
                //如果这里设置了AES，在生成热修复包的时候也需要配置
                .setAesKey("1234567890123456")
                .setEnableDebug(true)
                .setPatchLoadStatusStub(new PatchLoadStatusListener() {
                    @Override
                    public void onLoad(final int mode, final int code, final String info, final int handlePatchVersion) {
                        // 补丁加载回调通知
                        Log.i(TAG, String.format("mode=%d,code=%d,info=%s,handlePatchVersion=%d", mode, code, info, handlePatchVersion));
                        if (code == PatchStatus.CODE_LOAD_SUCCESS) {
                            // 表明补丁加载成功
                            Log.i(TAG, "表明补丁加载成功");
                        } else if (code == PatchStatus.CODE_LOAD_RELAUNCH) {
                            // 表明新补丁生效需要重启. 开发者可提示用户或者强制重启;
                            // 建议: 用户可以监听进入后台事件, 然后应用自杀
                            Log.i(TAG, "表明新补丁生效需要重启");
                        } else if (code == PatchStatus.CODE_LOAD_FAIL) {
                            // 内部引擎异常, 推荐此时清空本地补丁, 防止失败补丁重复加载
                            SophixManager.getInstance().cleanPatches();
                            Log.i(TAG, "内部引擎异常");
                        } else {
                            // 其它错误信息, 查看PatchStatus类说明
                            Log.i(TAG, "其它错误信息");
                        }
                    }
                }).initialize();
    }
}
